package com.lz.gmall.cart.rpc;

import com.lz.gmall.cart.biz.AddCartBizService;
import com.lz.gmall.cart.entity.CartItem;
import com.lz.gmall.cart.vo.AddCartVo;
import com.lz.gmall.common.result.Result;
import com.lz.gmall.common.result.ResultCodeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/inner/cart")
public class AddCartRpcController {

    @Autowired
    private AddCartBizService addCartBizService;

    /**
     * 远程调用接口，调用该接口进行将商品添加到购物车
     * @param skuId 商品id
     * @param skuNum 商品数量
     * userId 用户id
     * userTempId 用户临时id
     * 不建议采用注解的方式获取到请求头参数，因为如果多个方法都用到请求头参数，在每个方法参数上都要加上这些注解，开发效率太低
     * 使用mvc的工具类，这个类通过feign的远程调用发送的请求进行获取，feign不传递请求头，通过过滤器给feign的请求加上了请求头
     * 我们在这里也可以直接使用mvc的工具类，获取到feign发送的请求，从这个请求中直接获取需要的参数
     * @return
     */
    @GetMapping("/addCart/{skuId}/{skuNum}")
    public Result<AddCartVo> addCart(@PathVariable("skuId") Long skuId,
                                     @PathVariable("skuNum") Integer skuNum
                                     //@RequestHeader(value = "userId",required = false)String userId,
                                     //@RequestHeader(value = "userTempId",required = false)String userTempId
                                     ){
        //进行添加商品操作
        AddCartVo addCartVo = addCartBizService.addCart(skuId,skuNum);

        return Result.ok(addCartVo);
    }

    /**
     * 远程调用，获取购物车中选中的商品，进行生成订单
     * @return
     */
    @GetMapping(value = "/getCheckedCartItem")
    public Result<List<CartItem>> getCheckedCartItem() {
        List<CartItem> cartItemList = addCartBizService.getCheckedCartItem() ;
        return Result.build(cartItemList , ResultCodeEnum.SUCCESS) ;
    }

    /**
     * 远程调用，生成订单之后，删除购物车中选中生成订单的商品
     * @return
     */
    @GetMapping(value = "/deleteCheckedCartItem")
    public Result deleteCheckedCartItem() {
        addCartBizService.deleteCheckedCartItem() ;
        return Result.ok();
    }
}
